import moment from "moment";

const achievementTaskList = [ // 成就任务 只能完成一次
    // {
    //     name: '签到',
    //     desc: '完成新手任务喵~',
    //     reward: [
    //         {
    //             name: '花园经验',
    //             type: 'exp',
    //             num: 10,
    //         }
    //     ],
    //     isDone: false, // 是否已完成
    //     doneTime: '', // 完成时间
    //     id: 1,
    //     type: 'achievement', // 成就任务
    // }

]

const everyDayTask = [ // 每日任务
    {
        name: '光啊！！！',
        desc: '🌞 收集一次阳光喵~ ',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            }
        ],
        rewardText: '花园经验 * 10',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 1,
        type: 'everyDay', // 每日任务
    },
    {
        name: '合理种值',
        desc: '🌱 为你的花园种一棵植物吧！',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            }
        ],
        rewardText: '花园经验 * 10',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 2,
        type: 'everyDay', // 每日任务
    },
    {
        name: '铲除！全都铲除掉！',
        desc: '🌻 把用不到的植物铲掉喵~',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            }
        ],
        rewardText: '花园经验 * 10',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 3,
        type: 'everyDay', // 每日任务
    },
    {
        name: '光顾一下戴夫的小店',
        desc: '💰 购买任意商品',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            },
            {
                name: '磨损的银币',
                type: 'item',
                itemId: 13,
                num: 1,
            }
        ],
        rewardText: '花园经验 * 10、 磨损的银币 * 1',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 4,
        type: 'everyDay', // 每日任务
    },
    {
        name: '帮背包减一下负喵',
        desc: '👜 使用任意道具',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            },
            {
                name: '金钱',
                type: 'money',
                num: 10,
            }
        ],
        rewardText: '花园经验 * 10、 金钱 * 10',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 5,
        type: 'everyDay', // 每日任务
    },
    {
        name: '坚守花园',
        desc: '🌈 受到一次游荡的僵尸袭击且不造成任何损失',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            },
            {
                name: '金钱',
                type: 'money',
                num: 20,
            }
        ],
        rewardText: '花园经验 * 10、 金钱 * 20',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 6,
        type: 'everyDay', // 每日任务
    },
    {
        name: '重生之我是僵王博士',
        desc: '👻 唤醒一次僵尸',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            },
        ],
        rewardText: '花园经验 * 10',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 7,
        type: 'everyDay', // 每日任务
    },
    {
        name: '僵尸狂潮',
        desc: '🔥 袭击一次花园',
        reward: [
            {
                name: '花园经验',
                type: 'exp',
                num: 10,
            }
        ],
        rewardText: '花园经验 * 10',
        isDone: false, // 是否已完成
        isReward: false, // 奖励是否已领取
        doneTime: '', // 完成时间
        id: 8,
        type: 'everyDay', // 每日任务
    }
]

const getUserDefaultTask = () => {
    const result = {
        everyDayTask: [],
        achievementTaskList: [],
    }
    result.everyDayTask = everyDayTask
    result.achievementTaskList = achievementTaskList
    return result
}

// 完成任务
const handleTaskDone = (userTask = getUserDefaultTask(), type = 'everyDayTask', taskId) => {
    const targetTaskIndex = userTask[type].findIndex(item => item.id == taskId)
    let hasChange = false
    if (targetTaskIndex > -1) {
        if (type == 'everyDayTask') { // 完成每日任务
            if (userTask[type][targetTaskIndex].isDone == true && userTask[type][targetTaskIndex].doneTime) return { hasChange: false } // 已完成
            else { // 未完成 更改状态
                userTask[type][targetTaskIndex].isDone = true
                userTask[type][targetTaskIndex].doneTime = moment().format('YYYY-MM-DD HH:mm:ss')
                hasChange = true
            }
        }
    }
    else console.error('完成任务不存在', 'type', type, 'taskId', taskId);
    return {
        userTask,
        hasChange,
    }
}

// 任务面板
const getTaskListText = (userTask = getUserDefaultTask()) => {
    let result = [
        '花园每日活跃',
    ]
    userTask.everyDayTask.map(i => {
        result.push('⭐ ' + `「 ${i.name} 」`)
        result.push(i.desc)
        if (i.isDone) result.push('已完成: ' + i.doneTime)
        else result.push('活跃奖励: ' + i.rewardText)
        result.push('')
    })
    result.push('Tip:打开任务面板后会进行一次任务结算\n⭐请不要忘记领取奖励喵~')
    result = result.join('\n')
    const params = {
        result,
        isReward: false, // 是否收取奖励
    }
    let hasReward = userTask.everyDayTask.some(i => i.isDone && !i.isReward)
    if (hasReward) {
        let reward = []
        userTask.everyDayTask.filter(i => i.isDone && !i.isReward).map(i => {
            reward.push(...i.reward)
        })
        let resultReward = []
        reward.map(i => {
            if (i.type  == 'item') {
                let hasIndex = resultReward.findIndex(item => item.type == i.type && item.itemId == i.itemId)
                if (hasIndex > -1) resultReward[hasIndex].num += i.num
                else resultReward.push(i)
            }
            else {
                let hasIndex = resultReward.findIndex(item => item.type == i.type)
                if (hasIndex > -1) resultReward[hasIndex].num += i.num
                else resultReward.push(i)
            }
        })
        let resultRewardText = resultReward.map(i => {
            return `${i.type} × ${i.num}`
        }).join('\n')
        resultRewardText = `🎉 每日活跃结算： \n` + resultRewardText
        userTask.everyDayTask = userTask.everyDayTask.map(i => { // 修改任务状态 已领取
            if (i.isDone && !i.isReward) i.isReward = true
            return i
        })
        params.isReward = true
        params.userTask = userTask // 任务状态变更 已领取奖励
        params.resultReward = resultReward // 奖励列表
        params.resultRewardText = resultRewardText // 奖励文本
    }
    return params
}


export {
    achievementTaskList,
    everyDayTask,
    getUserDefaultTask,
    handleTaskDone,
    getTaskListText,
}